
import getLastEvent from '../utils/getLastEvent'
import Tracker from '../utils/trackSDK'
export function injectJsError () {

  window.addEventListener('error', (errorEvent) => {
    let lastEvent = getLastEvent()
    let data = {
      kind: 'stability', // 指标大类
      type: 'error', // 小类型
      errorType: 'JsError', // JS执行错误
      url: location.href, // 访问路径
      message: errorEvent.message, // 错误信息
      filename: errorEvent.filename, // 哪个文件报错
      position: `${errorEvent.lineno}:${errorEvent.colno}`,
      stack: getLines(errorEvent.error.stack), // 堆栈信息
      selector: lastEvent || '', // 代表最后一个操作的元素
    }
    Tracker.send({...data})
  })

  window.addEventListener('unhandledrejection', (errorEvent) => {
    let lastEvent = getLastEvent()
    let data = {
      kind: 'stability', // 指标大类
      type: 'unhandledrejection（promise）', // 小类型
      errorType: 'JsError', // JS执行错误
      url: location.href, // 访问路径
      position: `${errorEvent.lineno}:${errorEvent.colno}`,
      reason: errorEvent.reason.message,
      stack: getLines(errorEvent.reason.stack), // 堆栈信息
      selector: lastEvent || '', // 代表最后一个操作的元素
    }
    Tracker.send({...data})
  })

  function getLines (stack) {
    return stack.split('\n').slice(1).map(i => i.replace(/^\s+at\s+/g, '')).join('^')
  }

}